這篇列舉了一些在看 Shader 語法時會看到的寫法一些通則與注意事項
有些瑣碎,約略知道即可
寫 Shader 時,思考上有另一個很需要注意的部分
數值是 0~1
座標: 0~1,最邊邊是 0 與 1,而非整個 <canvas>
大小
顏色:白色不是 #ffffff,不是vec3(255.0, 255.0, 255.0),
而是 vec3(1.0
, 1.0
, 1.0
);
顏色與座標會在後續討論到
昨天提到的幾種Storage Qualifiers,
其中 attribute
、uniform
、varyings
這三種會跨到不同 Shader,
或是與 JavaScript 串接
在命名變數的時候,習慣會在變數前面再加 a
、v
、u
可較直覺聯想這個變數是哪一種 Storage Qualifiers
attribute vec2 aPosition;
varying vec2 vUv;
uniform sampler2D uTexture;
在寫 Vertex Shader 與 Fragment Shader 時,
最後都有固定的輸出寫法:
WebGL
單純 WebGL 專案時,
在寫 Vertex Shader 時,最後須要輸出 gl_Position
在寫 Fragment Shader 時,最後須要輸出 gl_FragColor
Shadertoy 或其他 WebGL JavaScript Library,
也有規定需要輸出的內容
雖然 gl_Position 與 gl_FragColor 是原生 WebGL 輸出的寫法,
但 WebGL JavaScript Library 可能會建議使用 Library 建議的輸出
Shader 裡可以使用很多的數學公式
數學公式是最麻煩也最不可思議的部分
考量並不一定需要在這篇列出
系列文會用到幾個,會在實際用到的時候再做說明